
# 代理迭代，构建一个自定义容器对象，里面包含有列表，元组或其他可迭代对象，想直接在这个新容器对象上执行迭代操作
class Node:
    def __init__(self, value):
        self._value = value
        self._children = []

    def __repr__(self):
        return 'Node ({!r})'.format(self._value)

    def add_child(self, node):
        self._children.append(node)

    # 需要定义一个__iter__()方法，将迭代操作代理到容器内部的对象上
    # 将迭代请求传递给内部的_children属性
    def __iter__(self):
        return iter(self._children)

def demo_1():
    root = Node(0)
    child_1 = Node(1)
    child_2 = Node(2)
    root.add_child(child_1)
    root.add_child(child_2)
    for ch in root:
        print(ch)

if __name__ == '__main__':
    demo_1()